package Soligee.controller.bo;

import Soligee.controller.facade.sessionFacadeImplements.SessionFacadeBuscarImplements;
import Soligee.model.vo.cadastros.CidadeVO;
import Soligee.model.vo.cadastros.EstadoVO;
import java.util.List;

public class PessoaBO {

    public boolean validarCPF(String cpf) throws NumberFormatException {

       cpf = cpf.replace(".", "");
       cpf= cpf.replace("-", "");
        int dig1 = 0,
                dig2 = 0,
                digito1 = 0,
                digito2 = 0,
                resto = 0,
                digitoCPF = 0;

        for (int i=1; i<cpf.length()-1;i++) {
            digitoCPF = Integer.valueOf(cpf.substring(i - 1, i)).intValue();

            dig1 = dig1 + (11 - i) * digitoCPF;

            dig2 = dig2 + (12 - i) * digitoCPF;
        }

        resto = (dig1 % 11);

        if (resto < 2) {
            digito1 = 0;
        } else {
            digito1 = 11 - resto;
        }

        dig2 += 2 * digito1;

        resto = (dig2 % 11);

        if (resto < 2) {
            digito2 = 0;
        } else {
            digito2 = 11 - resto;
        }

        String verifica = "";
        verifica = cpf.substring(cpf.length() - 2, cpf.length());

        String resulta = "";
        resulta = String.valueOf(digito1) + String.valueOf(digito2);

        return verifica.equals(resulta);
    }

    public boolean validaCnpj(String cnpj) throws NumberFormatException {
        if (!cnpj.substring(0, 1).equals("")) {
            try {
                cnpj = cnpj.replace('.', ' ');
                cnpj = cnpj.replace('/', ' ');
                cnpj = cnpj.replace('-', ' ');
                cnpj = cnpj.replaceAll(" ", "");
                int soma = 0, aux, dig;
                String cnpj_calc = cnpj.substring(0, 12);

                if (cnpj.length() != 14) {
                    return false;
                }
                char[] chr_cnpj = cnpj.toCharArray();
                /* Primeira parte */
                for (int i = 0; i < 4; i++) {
                    if (chr_cnpj[i] - 48 >= 0 && chr_cnpj[i] - 48 <= 9) {
                        soma += (chr_cnpj[i] - 48) * (6 - (i + 1));
                    }
                }
                for (int i = 0; i < 8; i++) {
                    if (chr_cnpj[i + 4] - 48 >= 0 && chr_cnpj[i + 4] - 48 <= 9) {
                        soma += (chr_cnpj[i + 4] - 48) * (10 - (i + 1));
                    }
                }
                dig = 11 - (soma % 11);
                cnpj_calc += (dig == 10 || dig == 11) ? "0" : Integer.toString(dig);
                /* Segunda parte */
                soma = 0;
                for (int i = 0; i < 5; i++) {
                    if (chr_cnpj[i] - 48 >= 0 && chr_cnpj[i] - 48 <= 9) {
                        soma += (chr_cnpj[i] - 48) * (7 - (i + 1));
                    }
                }
                for (int i = 0; i < 8; i++) {
                    if (chr_cnpj[i + 5] - 48 >= 0 && chr_cnpj[i + 5] - 48 <= 9) {
                        soma += (chr_cnpj[i + 5] - 48) * (10 - (i + 1));
                    }
                }
                dig = 11 - (soma % 11);
                cnpj_calc += (dig == 10 || dig == 11) ? "0" : Integer.toString(dig);
                return cnpj.equals(cnpj_calc);
            } catch (Exception e) {
                System.err.println("Erro !" + e);
                return false;
            }
        } else {
            return false;
        }

    }

    private static boolean validaIE(String ie) {
       boolean ret = false;
       if (((ie.substring(0, 1)).toUpperCase()) == "P") {
          String s = ie.substring(1, 9);
          int[] nro = new int[12];
          for (int i = 0; i <= 7; i++)
             nro[i] = new Integer(s.substring(i, i + 1)).intValue();
          int soma = (nro[0] * 1) + (nro[1] * 3) + (nro[2] * 4)
                + (nro[3] * 5) + (nro[4] * 6) + (nro[5] * 7) + (nro[6] * 8)
                + (nro[7] * 10);
          int dig = soma % 11;
          if (dig >= 10)
             dig = 0;
          boolean resultado = (dig == nro[8]);
          if (!resultado)
             ret = false;
       } else {
          if (ie.length() < 12) {
             ret = false;
          } else {
             int[] nro = new int[12];
             for (int i = 0; i <= 11; i++)
                nro[i] = new Integer(ie.substring(i, i + 1)).intValue();
             int soma = (nro[0] * 1) + (nro[1] * 3) + (nro[2] * 4)
                   + (nro[3] * 5) + (nro[4] * 6) + (nro[5] * 7)
                   + (nro[6] * 8) + (nro[7] * 10);
             int dig = soma % 11;
             if (dig >= 10)
                dig = 0;
             boolean resultado = (dig == nro[8]);
             if (!resultado) {
                ret = false;
             } else {
                soma = (nro[0] * 3) + (nro[1] * 2) + (nro[2] * 10)
                      + (nro[3] * 9) + (nro[4] * 8) + (nro[5] * 7)
                      + (nro[6] * 6) + (nro[7] * 5) + (nro[8] * 4)
                      + (nro[9] * 3) + (nro[10] * 2);
                dig = soma % 11;
                if (dig >= 10)
                   dig = 0;
                ret = (dig == nro[11]);
             }
          }
       }
       if (ret) {
          System.out.println("A I.E. [" + ie + "]   é   válida.");
       } else {
          System.out.println("A I.E. [" + ie + "]   é inválida.");
       }
       return ret;
    }  
    //retorna o Estado de acordo com o codigo do radio
    public CidadeVO determinaCidade(int codCidade){
        SessionFacadeBuscarImplements busca =  new SessionFacadeBuscarImplements();
        List<CidadeVO> listaCidade = busca.buscaPorCodigo(CidadeVO.class,"codCidade",codCidade);
        CidadeVO cidade = (CidadeVO) listaCidade.iterator().next();
        return cidade;
    }
}   

